//
//  main.m
//  06_SurveyHomework
//
//  Created by 徐昊 on 16/7/11.
//  Copyright © 2016年 徐昊. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
//    NSDate
//    
//    计算当前时间和一个固定时间的差值,如果差值在60秒内,输出"刚刚",如果在60秒外3600秒内,输出"xx分钟前",如果3600秒外, 3600*24秒内,输出"xx小时前"
    NSDate *date = [NSDate date];
    NSLog(@"%@", date);
    NSString *stringDate = @"2016/7/11 20:36:00";
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
    [dateFormatter setDateFormat:@"yyyy/MM/dd HH:mm:ss"];
    NSDate *dateCheck = [dateFormatter dateFromString:stringDate];
    NSLog(@"Date = %@", dateCheck);
    NSTimeInterval interval = fabsl([dateCheck timeIntervalSinceNow]);
    if (interval > 0 && interval < 60) {
        NSLog(@"刚刚");
    } else if (interval >= 60 && interval < 3600) {
        NSLog(@"%d分钟之前", (int)interval / 60);
    } else {
        NSLog(@"%d小时之前", (int)interval / 3600);
    }
    NSLog(@"%lf", interval);
//    将字符串@"2016年04月01日 01点20分18秒"转换为NSDate对象。
    NSString *strDate = @"2016年04月01日 01点20分18秒";
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy年MM月dd日 HH点mm分ss秒"];
    NSDate *givenDate = [formatter dateFromString:strDate];
    NSString *nowtimeStr = [formatter stringFromDate:givenDate];
    NSLog(@"%@", givenDate);//格林尼治时间
    NSLog(@"%@", nowtimeStr);//北京时间
//    将1468232420转成日期类型
    // 北京时间戳1468232420（可以把北京时间戳转成北京时间、格林尼治时间）
    NSDate *date1 = [NSDate dateWithTimeIntervalSince1970:1468232420];
    NSLog(@"%@",date1);// 这个时间是格林尼治时间
    NSString *dat = [formatter stringFromDate:date1];
    NSLog(@"%@", dat);// 这个时间是北京时间
//    研究NSDateComponents
//    NSDateComponents
//    NSDateComponents封装在一个可扩展的，面向对象的方式的日期组件。它是用来弥补时间的日期和时间组件提供一个指定日期：小时，分钟，秒，日，月，年，等等。它也可以用来指定的时间，例如，5小时16分钟。一个NSDateComponents对象不需要定义所有组件领域。当一个NSDateComponents的新实例被创建，日期组件被设置为NSUndefinedDateComponent。
//    一个NSDateComponents对象本身是毫无意义的;你需要知道它是针对什么日历解释，你需要知道它的值是否是正整数和值是多少。
//    NSDateComponents的实例不负责回答关于一个日期以外的信息，它是需要先初始化的。例如，如果你初始化一个对象为2004年5月6日，其星期几NSUndefinedDateComponent，不是星期四。要得到正确的星期几，你必须创建一个NSCalendar日历实例，创建一个NSDate对象并使用dateFromComponents：方法，然后使用components:fromDate:检索平周几
//    Getting Information About an NSDateComponents Object
//    
//    获取一个NSDateComponents对象的信息
//    
//    –era 时代
//    –year 年
//    –month 月
//    –day 天
//    –hour 时
//    –minute 分
//    –second 秒
//    –week
//    –weekday
//    –weekdayOrdinal
//    –quarter 季度
//    Setting Information for an NSDateComponents Object
//        
//        设置一个NSDateComponents对象的信息
//        
//        –setEra:
//        –setYear:
//        –setMonth:
//        –setDay:
//        –setHour:
//        –setMinute:
//        –setSecond:
//        –setWeek:
//        –setWeekday:
//        –setWeekdayOrdinal:
//        –setQuarter:
//        例子如下：获得2004年5月6日是星期几
//        NSDateComponents *comps = [[NSDateComponents alloc] init];
//    [comps setDay:6];
//    [comps setMonth:5];
//    [comps setYear:2004];
//    NSCalendar *gregorian = [[NSCalendar alloc]
//                             initWithCalendarIdentifier:NSGregorianCalendar];
//    NSDate *date = [gregorian dateFromComponents:comps];
//    [comps release];
//    NSDateComponents *weekdayComponents =
//    [gregorian components:NSWeekdayCalendarUnit fromDate:date];
//    int weekday = [weekdayComponents weekday];
//    NSLog(@"%d",weekday);
//    如果需要更加详细，请查阅“Calendars, Date Components, and Calendar Units”in Date and Time Programming Guide.日期和时间的程序指南
//    
    //一段例子：计算距离某一天还有多少时间
    NSDate* toDate   = [ [ NSDate alloc] initWithString:@"2012-9-29 0:0:00 +0600" ];
    NSDate*  startDate  = [ [ NSDate alloc] init ];
    NSCalendar* chineseClendar = [ [ NSCalendar alloc ] initWithCalendarIdentifier:NSGregorianCalendar ];
    NSUInteger unitFlags =
    NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit | NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit;
    NSDateComponents *cps = [chineseClendar components:unitFlags fromDate:startDate  toDate:toDate  options:0];
    NSInteger diffHour = [cps hour];
    NSInteger diffMin    = [cps minute];
    NSInteger diffSec   = [cps second];
    NSInteger diffDay   = [cps day];
    NSInteger diffMon  = [cps month];
    NSInteger diffYear = [cps year]; 
    NSLog(  @" From Now to %@, diff: Years: %ld  Months: %ld, Days; %ld, Hours: %ld, Mins:%ld, sec:%ld",
          [toDate description], diffYear, diffMon, diffDay, diffHour, diffMin,diffSec ); 
    [toDate release]; 
    [startDate release]; 
    [chineseClendar release];
//    预习内存管理, 整理今天的代码

    
    return 0;
}
